home *** CD-ROM | disk | FTP | other *** search
- ; *** Includes laden (Pfad individuell setzen!) ***
-
- INCDIR maxon:include/
- INCLUDE exec/exec_lib.i
- INCLUDE exec/execbase.i
- INCLUDE exec/tasks.i
-
- ;--- Nur bei Start von WBench nötig: ----
- INCLUDE startup.asm
-
- *************************************
- * RemTD *
- *-----------------------------------*
- * Funktion: Schaltet Laufwerke ab *
- * (friert sie ein). Bei nochmaligem *
- * Aufruf werden diese wieder *
- * aktiviert. *
- * Eingabe : ------------- *
- * Ausgabe : ------------- *
- * Aufruf : *
- * CLI/Shell: RemTD ohne Argumente *
- * Workbench: Piktogramm *
- *************************************
-
- Main
- lea TaskName(pc),a5
- lea TDBasis(pc),a4
- move.l $4.w,a6
- jsr _LVODisable(a6) ;System einfrieren
-
- .loop
- move.l a5,a1
- jsr _LVOFindTask(a6) ;TD suchen
- tst.l d0 ;gefunden?
- beq.s .notd ;Nein -> ab!
-
- move.l d0,a1 ;Ja -> Basis nach a1
- cmp.b #8,TC_STATE(a1) ;Task schon gefroren?
- beq.s .makeactive ;Ja -> aktivieren
- ;Nein -> einfrieren
- moveq #0,d7 ;Flag, TD in TaskWait-Liste
- move.b #8,TC_STATE(A1) ;TS_FROZEN nach Statusflag
-
- .remtd
- move.l a1,(a4)+ ;in eigene Liste eintragen
- jsr _LVORemove(a6) ;Basis aus System entfernen
-
- bra.s .loop ;Weiter, bis Ende...
-
- ;--- Task aktivieren ---
-
- .makeactive
- moveq #1,d7 ;Flag, TD in TaskReady-Liste
- move.b #TS_READY,TC_STATE(a1) ;Ready als Status
- bra.s .remtd ;und Liste entfernen
-
- .notd
- lea TDBasis(pc),a4 ;Eigene Liste nach a4
- lea TaskWait(a6),a3 ;TaskWait-Liste aus Exec
- tst d7 ;Flag testen
- beq.s .loopinit ;False -> Liste übernehmen
- lea TaskReady(a6),a3 ;sonst TaskReady-Liste
-
- .loopinit
- tst.l (a4) ;Einträge vorhanden?
- beq.s .norm ;nein-> normal weiter
-
- .loopins move.l (a4)+,a1 ;node holen
- move.l a3,a0 ;Liste nach a0
- jsr _LVOEnqueue(a6) ;Node in Liste einfügen
- tst.l (a4) ;weitere Node vorhanden?
- beq.s .norm ;Nein -> normal weiter
- bra.s .loopins ;sonst Schleifenanfang
-
- .norm
- jsr _LVOEnable(a6) ;System wecken
- suba.l a1,a1 ;Eigenen Task suchen
- jsr _LVOFindTask(a6)
- move.l d0,a1 ;-> nach a1
- tst.l d0 ;nicht gefunden
- beq.s .weg ;dann Ende
-
- moveq #0,d0 ;Rescheduling durchführen
- move.b LN_PRI(a1),d0 ;damit modifizierte Liste
- jsr _LVOSetTaskPri(a6) ;anerkannt wird...
-
- .weg
- moveq #0,d0 ;Return-Flag setzen
- rts ;und weg...
-
- ;*** Namen und Strukturen ***
-
- TaskName
- dc.b "trackdisk.device",0
- even
-
- ;--- genügend Platz für TD-Basen lassen ---
- TDBasis
- dc.l 0,0,0,0,0,0 ;man weiß nie!
-
- VersionsString:
- dc.b "$VER: RemTD V0.5 (24.12.93)"
- even
-